﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dados.ClassesSQLServer;
using Dados.Interfaces;
using Dados.ValueObjects;
using System.ComponentModel;

namespace Negocios
{
    [DataObject]
    class AluguelVeiculoBOMetodos
    {
        private IAluguelVeiculo iAluguelDados;
        
        public AluguelVeiculoBOMetodos() {
            iAluguelDados = new AluguelSQLServer();
        }

        [DataObjectMethod(DataObjectMethodType.Insert, true)]
        public bool inserir(AluguelVeiculoBO aBO)
        {
            AluguelVO aVO = new AluguelVO();

            aVO.Cliente = aBO.Cliente.Cpf;
            aVO.Locadora = aBO.Locadora.Id;
            aVO.DataInicio = aBO.DataInicio;
            aVO.DataFim = aBO.DataFim;
            aVO.Usuario = aBO.Usuario.Login;

            return (iAluguelDados.Inserir(aVO) == 1);
        }

        [DataObjectMethod(DataObjectMethodType.Delete, true)]
        public bool remover(int id)
        {
            return iAluguelDados.Remover(id) == 1;
        }

        [DataObjectMethod(DataObjectMethodType.Update, true)]
        public bool atualizar(AluguelVeiculoBO aBO)
        {
            AluguelVO aVO = new AluguelVO();

            aVO.Id = aBO.Id;
            aVO.Cliente = aBO.Cliente.Cpf;
            aVO.Locadora = aBO.Locadora.Id;
            aVO.DataInicio = aBO.DataInicio;
            aVO.DataFim = aBO.DataFim;
            aVO.Usuario = aBO.Usuario.Login;

            return (iAluguelDados.Atualizar(aVO) == 1);
        }

        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public AluguelVeiculoBO consultar(int id)
        {
            AluguelVO aVO = iAluguelDados.Consultar(id);
            AluguelVeiculoBO aBO = new AluguelVeiculoBO();

            aBO.Id = aVO.Id;

            ClienteBO cBO = new ClienteBO();
            cBO.Cpf = aVO.Cliente;
            aBO.Cliente = cBO;

            LocadoraBO lBO = new LocadoraBO();
            lBO.Id = aVO.Locadora;
            aBO.Locadora = lBO;

            aBO.DataInicio = aVO.DataInicio;
            aBO.DataFim = aVO.DataFim;

            UsuarioBO uBO = new UsuarioBO();
            uBO.Login = aVO.Usuario;
            aBO.Usuario = uBO;
                
            
            return aBO;
        }

        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public List<AluguelVeiculoBO> consultaTodos()
        {

            List<AluguelVeiculoBO> lAluguelBO = new List<AluguelVeiculoBO>();
            List<AluguelVO> lAluguelVO = (new AluguelSQLServer()).ConsultaTodos();

            foreach (AluguelVO aVO in lAluguelVO)
            {
                AluguelVeiculoBO aBO = new AluguelVeiculoBO();
                aBO.Id = aVO.Id;
             
                //AluguelVO aVO = iAluguelDados.Consultar(id);
                //AluguelBO aBO = new AluguelBO();

          
                ClienteBO cBO = new ClienteBO();
                cBO.Cpf = aVO.Cliente;
                aBO.Cliente = cBO;

                LocadoraBO lBO = new LocadoraBO();
                lBO.Id = aVO.Locadora;
                aBO.Locadora = lBO;

                aBO.DataInicio = aVO.DataInicio;
                aBO.DataFim = aVO.DataFim;

                UsuarioBO uBO = new UsuarioBO();
                uBO.Login = aVO.Usuario;
                aBO.Usuario = uBO;
                
                lAluguelBO.Add(aBO);
            }

            return lAluguelBO;

        }
    }
}
